package com.carrental.search.client;

import com.carrental.common.result.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;

/**
 * 门店服务Feign客户端
 * 用于与门店微服务通信
 */
@FeignClient(name = "car-store", path = "/store")
public interface StoreClient {

    /**
     * 获取门店详情
     *
     * @param id 门店ID
     * @return 门店详情
     */
    @GetMapping("/detail/{id}")
    Result<Map<String, Object>> getStoreDetail(@PathVariable("id") Long id);

    /**
     * 获取所有门店列表
     *
     * @return 门店列表
     */
    @GetMapping("/list")
    Result<List<Map<String, Object>>> getAllStores();

    /**
     * 根据城市获取门店列表
     *
     * @param city 城市
     * @return 门店列表
     */
    @GetMapping("/city/{city}")
    Result<List<Map<String, Object>>> getStoresByCity(@PathVariable("city") String city);

    /**
     * 获取热门门店列表
     *
     * @param limit 限制数量
     * @return 热门门店列表
     */
    @GetMapping("/hot")
    Result<List<Map<String, Object>>> getHotStores(@RequestParam(value = "limit", defaultValue = "10") Integer limit);

    /**
     * 获取附近门店列表
     *
     * @param latitude  纬度
     * @param longitude 经度
     * @param distance  距离（公里）
     * @return 附近门店列表
     */
    @GetMapping("/nearby")
    Result<List<Map<String, Object>>> getNearbyStores(
            @RequestParam("latitude") Double latitude,
            @RequestParam("longitude") Double longitude,
            @RequestParam(value = "distance", defaultValue = "10") Double distance);

    /**
     * 获取所有城市列表
     *
     * @return 城市列表
     */
    @GetMapping("/cities")
    Result<List<String>> getAllCities();
} 